import fs from 'fs/promises';
import path from 'path';
import sharp from 'sharp';

async function convertToWebP(inputDir, outputDir) {
    try {
        // 解码URL编码的路径
        inputDir = decodeURIComponent(inputDir);
        outputDir = decodeURIComponent(outputDir);

        // 确保输出目录存在
        await fs.mkdir(outputDir, { recursive: true });

        // 读取输入目录中的所有文件
        const files = await fs.readdir(inputDir);

        for (const file of files) {
            const inputPath = path.join(inputDir, file);
            const outputPath = path.join(outputDir, `${path.parse(file).name}.png`);

            // 只处理图片文件
            if (/\.(jpg|jpeg|png|gif|bmp)$/i.test(file)) {
                try {
                    await sharp(inputPath)
                        .webp({
                            quality:50,  // 质量设置为80，在质量和大小间取得平衡
                            lossless: false,  // 非完全无损，但视觉上基本无损
                            alphaQuality: 80,  // 透明通道质量
                            effort: 6  // 压缩努力级别(0-6)，6为最高压缩
                        })
                        .toFile(outputPath);

                    console.log(`转换成功: ${file} -> ${path.basename(outputPath)}`);
                } catch (err) {
                    console.error(`转换失败 ${file}:`, err.message);
                }
            }
        }
    } catch (err) {
        console.error('处理过程中出错:', err);
    }
}
// Get current directory path in ES modules
let currentDir = path.dirname(new URL(import.meta.url).pathname);
if (process.platform === 'win32') {
    currentDir = currentDir.substring(1); // Remove leading slash on Windows
}
// 使用示例
const inputDir = path.join(currentDir, './images');  // 源图片目录(绝对路径)
console.log('当前目录:', inputDir);
const outputDir = path.join(currentDir, './images', 'png');  // 输出目录(绝对路径)
convertToWebP(inputDir, outputDir)
    .then(() => console.log('所有图片转换完成!'))
    .catch(console.error);
